package com.wy._05Random.bean;

import com.wy._05Random.randomFile.Enum.FontEnum;
import com.wy._05Random.randomFile.Enum.ImageTypeEnum;
import com.wy._05Random.randomFile.randomPic.backgroundImpl.BacI;
import com.wy._05Random.randomFile.randomPic.backgroundImpl.ColorfulBlack;

import java.awt.*;
import java.awt.geom.Arc2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.util.Random;

/**
 * 自定义的图片对象
 */
public class ImageObj {
    private BufferedImage image;
    private Background background;
    private final Random random = new Random();
    private final Graphics2D g2d = image.createGraphics();

    public ImageObj(int width, int height, ImageTypeEnum imageType) {
        image = new BufferedImage(width, height, imageType.getDigitalIdentification());
    }

    public Background getBackground() {


        return background;
    }

    public void setBackground(BacI bacI) {
        BufferedImage handle = bacI.handle(getBufferedImage());
    }

    public BufferedImage getBufferedImage() {
        return image;
    }

    /**
     * 添加字体
     *
     * @param x         位置 x
     * @param y         位置 y
     * @param fontSize  字体大小
     * @param fontName  字体名字
     * @param fontStyle 字体样式
     * @param color     字体颜色
     * @param str       字符串
     */
    public void addFont(int x, int y, int fontSize, String fontName, FontEnum.FontStyle fontStyle, Color color, String str) {
        g2d.setFont(new Font(fontName, fontStyle.getDigitalIdentification(), fontSize));
        g2d.setColor(color);
        g2d.drawString(str, x, y);
    }

    /**
     * 添加实心圆
     *
     * @param x      位置x
     * @param y      位置y
     * @param radius 半径
     * @param color  颜色
     */
    public void addSolidCircle(int x, int y, int radius, Color color) {
        g2d.setColor(color);
        g2d.fillOval(x, y, radius, radius);
    }

    /**
     * 添加空心圆
     *
     * @param x      位置x
     * @param y      位置y
     * @param radius 半径
     * @param color  颜色
     */
    public void addHollowCircle(int x, int y, int radius, Color color) {
        g2d.setColor(color);
        g2d.draw(new Arc2D.Double(x, y, radius, radius, 0, 360, Arc2D.PIE));
        g2d.dispose();
    }

    /**
     * 添加实心椭圆
     *
     * @param x      左上角坐标
     * @param y      右上角坐标
     * @param width  x轴长度
     * @param height y轴长度
     */
    public void addSolidEllipse(int x, int y, int width, int height, Color color) {
        g2d.setColor(color);
        g2d.fillOval(x, y, width, height);
        g2d.dispose();
    }

    /**
     * 添加空心椭圆
     *
     * @param x      左上角坐标
     * @param y      右上角坐标
     * @param width  x轴长度
     * @param height y轴长度
     */
    public void addHollowEllipse(int x, int y, int width, int height, Color color) {
        g2d.setColor(color);
        g2d.setStroke(new BasicStroke(5)); // 设置边框宽度 TODO：？
        g2d.draw(new Arc2D.Double(x, y, width, height, 0, 360, Arc2D.PIE));
    }

    /**
     * 添加实心方形
     *
     * @param x          左上角坐标x
     * @param y          左上角坐标y
     * @param edgeLength 边长
     * @param color      颜色
     */
    public void addSolidSquare(int x, int y, int edgeLength, Color color) {
        g2d.fillRect(x, y, edgeLength, edgeLength);
        g2d.dispose();
    }

    /**
     * 添加空心方形
     *
     * @param x          左上角坐标x
     * @param y          左上角坐标y
     * @param edgeLength 边长
     * @param color      颜色
     */
    public void addHollowSquare(int x, int y, int edgeLength, Color color) {
        Rectangle2D.Double rectangle = new Rectangle2D.Double(x, y, edgeLength, edgeLength);
        g2d.setColor(color); // 设置边框颜色
        g2d.setStroke(new BasicStroke(5)); // 设置边框宽度
        g2d.draw(rectangle);
        g2d.dispose();
    }

    /**
     * 添加实心矩形
     *
     * @param x      左上角坐标x
     * @param y      左上角坐标y
     * @param width  宽度
     * @param height 高度
     * @param color  颜色
     */
    public void addSolidRectangle(int x, int y, int width, int height, Color color) {
        g2d.fillRect(x, y, width, height);
        g2d.dispose();
    }

    /**
     * 绘制空心矩形
     *
     * @param x      左上角坐标x
     * @param y      左上角坐标y
     * @param width  宽度
     * @param height 高度
     * @param color  颜色
     */
    public void addHollowSquare(int x, int y, int width, int height, Color color) {
        Rectangle2D.Double rectangle = new Rectangle2D.Double(x, y, width, height);
        g2d.setColor(color); // 设置边框颜色
        g2d.setStroke(new BasicStroke(5)); // 设置边框宽度
        g2d.draw(rectangle);
    }


    public void addLine() {

    }

    public void addRandomCircle() {

    }

    public void addRandomFont() {

    }


    public void addRandomSquare() {

    }

    public void addRandomLine() {

    }


}
